; 编写0号中断处理程序

assume cs:code


code segment
	start:
	; 将0号中断地址放入中断向量表
	mov ax,0
	mov ds,ax

	mov word ptr ds:[0],0
	mov word ptr ds:[2],200h
	; 将0号中断程序放入0：200h中
		;指向源程序
		mov ax,code
		mov ds,ax
		mov si,offset datastart

		;指向目的地址
		mov ax,0
		mov es,ax
		mov di,200h

		mov cx,offset in_code_end-offset datastart

		cld
		;传送
		rep movsb



	mov ax,4c00h
	int 21h


	; 0号中断程序 在屏幕绘制 字符串
		datastart:

		db 'divide error!'  ; 一定要一起加载进入中断程序地址，因为传送代码执行完之后会马上被回收

		dataend:

		in_code:	
		; 指向字符串
		mov ax,0
		mov ds,ax
		; 指向显存
		mov ax,0b872h
		mov es,ax

		; 写入缓存

		mov cx,offset dataend- offset datastart

		mov bx,0
		mov si,200h

		s: ; 循环写入显存
			; 写字符
			mov al,ds:[si]
			mov es:[bx],al
			; 写显示类型
			
			mov byte ptr es:[bx+1],2

			add bx,2
			inc si
			loop s

		in_code_end:
	  	
code ends
end start
